package org.jeecg.weixin.cp.bean.oa;

import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.experimental.Accessors;
import org.jeecg.weixin.cp.bean.oa.applydata.ApplyDataContent;
import org.jeecg.weixin.cp.util.json.WxCpGsonBuilder;

import java.io.Serializable;
import java.util.List;

/**
 * 提交审批申请 请求对象类.
 *
 * @author <a href="https://github.com/binarywang">Binary Wang</a>
 * @date 2020-07-18
 */
@Data
@Accessors(chain = true)
public class WxCpOaApplyEventRequest implements Serializable {
	private static final long serialVersionUID = 3362660678938569341L;

	/**
	 * 申请人userid，此审批申请将以此员工身份提交，申请人需在应用可见范围内
	 */
	@SerializedName("creator_userid")
	private String creatorUserId;

	/**
	 * 模板id。可在“获取审批申请详情”、“审批状态变化回调通知”中获得，也可在审批模板的模板编辑页面链接中获得。暂不支持通过接口提交[打卡补卡][调班]模板审批单。
	 */
	@SerializedName("template_id")
	private String templateId;

	/**
	 * 审批人模式：0-通过接口指定审批人、抄送人（此时approver、notifyer等参数可用）;
	 * 1-使用此模板在管理后台设置的审批流程，支持条件审批。默认为0
	 */
	@SerializedName("use_template_approver")
	private Integer useTemplateApprover;

	/**
	 * 审批流程信息，用于指定审批申请的审批流程，支持单人审批、多人会签、多人或签，可能有多个审批节点，仅use_template_approver为0时生效。
	 */
	@SerializedName("approver")
	private List<Approver> approvers;

	/**
	 * 抄送人节点userid列表，仅use_template_approver为0时生效。
	 */
	@SerializedName("notifyer")
	private String[] notifiers;

	/**
	 * 抄送方式：1-提单时抄送（默认值）； 2-单据通过后抄送；3-提单和单据通过后抄送。仅use_template_approver为0时生效。
	 */
	@SerializedName("notify_type")
	private Integer notifyType;

	/**
	 * 审批申请数据，可定义审批申请中各个控件的值，其中必填项必须有值，选填项可为空，数据结构同“获取审批申请详情”接口返回值中同名参数“apply_data”
	 */
	@SerializedName("apply_data")
	private ApplyData applyData;

	/**
	 * 摘要信息，用于显示在审批通知卡片、审批列表的摘要信息，最多3行
	 */
	@SerializedName("summary_list")
	private List<SummaryInfo> summaryList;

	public String toJson() {
		return WxCpGsonBuilder.create().toJson(this);
	}

	@Data
	@Accessors(chain = true)
	public static class Approver implements Serializable {
		private static final long serialVersionUID = 7625206971546930988L;

		/**
		 * 节点审批方式：1-或签；2-会签，仅在节点为多人审批时有效
		 */
		private Integer attr;

		/**
		 * 审批节点审批人userid列表，若为多人会签、多人或签，需填写每个人的userid
		 */
		@SerializedName("userid")
		private String[] userIds;
	}

	@Data
	@Accessors(chain = true)
	public static class ApplyData implements Serializable {
		private static final long serialVersionUID = -2462732405265306981L;

		/**
		 * 审批申请数据，可定义审批申请中各个控件的值，其中必填项必须有值，选填项可为空， 数据结构同“获取审批申请详情”接口返回值中同名参数“apply_data”
		 */
		@SerializedName("contents")
		private List<ApplyDataContent> contents;
	}

}
